/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.com.cotelasa.scp.controlador;

import java.io.Serializable;
import java.sql.Timestamp;
import java.util.Date;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.event.ActionEvent;
import javax.inject.Inject;
import javax.inject.Named;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import pe.com.cotelasa.common.controlador.MBGenerico;
import pe.com.cotelasa.scp.common.IObserver;
import pe.com.cotelasa.scp.controlador.backingBean.BKStockInicial;
import pe.com.cotelasa.scp.controlador.comando.ComandoGuardar;
import pe.com.cotelasa.scp.dominio.common.URLPaginacion;
import pe.com.cotelasa.scp.dominio.excepcion.ModelExcepcion;
import pe.com.cotelasa.scp.dominio.excepcion.ServiceException;
import pe.com.cotelasa.scp.dominio.modelo.KardexModel;
import pe.com.cotelasa.scp.dominio.service.IServicioArticulo;
import pe.com.cotelasa.scp.dominio.service.IServicioArticuloSede;
import pe.com.cotelasa.scp.dominio.service.IServicioCategoriaArticulo;
import pe.com.cotelasa.scp.dominio.service.IServicioKardex;
import pe.com.cotelasa.scp.dominio.service.IServicioTipoUnidadMinima;
import pe.com.cotelasa.scp.entidad.Articulo;
import pe.com.cotelasa.scp.entidad.ArticuloSede;
import pe.com.cotelasa.scp.entidad.ArticuloSedePK;
import pe.com.cotelasa.scp.entidad.Kardex;
import pe.com.cotelasa.scp.entidad.Sede;
import pe.com.cotelasa.scp.entidad.TipoUnidadMinima;
import pe.com.cotelasa.seguridad.controlador.backingBean.BKSession;

/**
 *
 * @author WINDOWS 7
 */
@Named(value = "MBStockInicial")
@Scope("request")
public class MBStockInicial extends MBGenerico implements IMantenedor, IObserver, Serializable {

    @Inject
    private BKStockInicial bk;
    @Inject
    private IServicioArticuloSede servicio;
    @Inject
    private IServicioCategoriaArticulo servicioCategoria;
    @Inject
    private IServicioArticulo servicioArticulo;
    @Inject
    private IServicioTipoUnidadMinima servicioUM;
    @Inject
    private MBCompBuscarDireccion mbSede;
    @Inject
    private KardexModel kardexModel;
    @Autowired
    BKSession session;

    public String mostrarMantenimiento() {
        bk.setComando(new ComandoGuardar(this));
        mbSede.addObserver(this);
        bk.setRazonSocial("");
        bk.setArticuloFormulario(new ArticuloSede());
        bk.getArticuloFormulario().setArticulo(new Articulo());
        bk.getArticuloFormulario().setUnidadMedida(new TipoUnidadMinima());
        try {
            bk.setListaTipoUnidadMinima(servicioUM.listarTipoUnidadMinimasActivos());
            bk.setListaCategoria(servicioCategoria.listarCategoriasArticulosActivos());

        } catch (ServiceException e) {
            e.printStackTrace();
        }

        return URLPaginacion.StockInicial.URL_FORMULARIO_STOCK_INICIAL;
    }

    @Override
    public void actualizarObservador(Object object) {
        Map<String, Object> datos = (Map<String, Object>) object;
        Sede sede = (Sede) datos.get("sede");
        bk.getArticuloFormulario().setSede(sede);
        if(sede.getIdEmpresa() != null){
            bk.setRazonSocial(sede.getIdEmpresa().getRazonSocial());
        }else if(sede.getIdProveedor() != null){
            bk.setRazonSocial(sede.getIdProveedor().getRazonSocial());
        }
    }

    public void buscarArticulo() {
        try {

            Articulo articulo = new Articulo();
            articulo.setIdCategoriaArticulo(this.bk.getArticuloFormulario().getArticulo().getIdCategoriaArticulo());
            this.bk.setListaArticulo(servicioArticulo.listarArticulosPorCategoria(articulo));
        } catch (ServiceException e) {
            e.printStackTrace();
            mostrarError("Ocurrieron algunos problemas al cargar la informacion. Vuelva a intentar.");
        }
    }

    @Override
    public String actualizar() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public String guardar() {
        try {
            ArticuloSedePK pk = new ArticuloSedePK(
                    session.getEmpresa().getId(),
                    bk.getArticuloFormulario().getSede().getId(), 
                    bk.getArticuloFormulario().getArticulo().getId(),
                    bk.getArticuloFormulario().getPartidaLote());

            bk.getArticuloFormulario().setId(pk);
            bk.getArticuloFormulario().setUnidadMedida(servicioUM.conseguirTipoUnidadMinimaPorId(bk.getArticuloFormulario().getUnidadMedida().getId()));
            if (servicio.buscarArticuloSede(bk.getArticuloFormulario()) == null) {
                
                bk.getArticuloFormulario().setFecCreacion(new Timestamp(new Date().getTime()));
                bk.getArticuloFormulario().setUsrCreacion(session.getUsuario().getUsuario());
                servicio.guardarArticuloSede(bk.getArticuloFormulario());
                if (bk.getArticuloFormulario().getSede().getIdEmpresa() != null) {
                    Kardex kardex = kardexModel.inicializarKardexConArticuloSede(bk.getArticuloFormulario());
                    kardex.setUsrCreacion(session.getUsuario().getUsuario());
                    kardexModel.guardarKardex(kardex);
                }

                mostrarMensaje("Este Guardo este articulo en la Sede");
            } else {
                System.out.println("entro porque existe: ");
                mostrarError("Este Articulo ya existe en la Sede");
            }


        } catch (ServiceException e) {
            e.printStackTrace();
            //Logger.getLogger(MBStockInicial.class.getName()).log(Level.SEVERE, null, e);
        }
        return cancelar();
    }

    @Override
    public void eliminar(ActionEvent actionEvent) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public String editar() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public String nuevo() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public String ver() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public String aceptar() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public String retroceder() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public String cancelar() {
        return mostrarMantenimiento();
    }
}
